package main

import (
	"fmt"
	"sync"
	"time"
)

// 多个 goroutine 并发访问切片，都执行扩容操作 结果无法预期（扩容后的最终长度固定，但是前十位值不确定）

var sharedSlice []int // 全局共享的切片

func main() {
	var wg sync.WaitGroup
	wg.Add(2)

	// 第一个 goroutine 进行一系列 append 操作
	go func() {
		defer wg.Done()
		for i := 0; i < 10000; i++ {
			// 模拟一点点延时，让调度更频繁
			time.Sleep(1 * time.Microsecond)
			sharedSlice = append(sharedSlice, i)
		}
	}()

	// 第二个 goroutine 进行另一系列 append 操作
	go func() {
		defer wg.Done()
		for i := 10000; i < 20000; i++ {
			time.Sleep(1 * time.Microsecond)
			sharedSlice = append(sharedSlice, i)
		}
	}()

	wg.Wait()
	fmt.Println("最终切片长度:", len(sharedSlice))
	// 打印前 10 个元素看看效果
	fmt.Println("前10个元素:", sharedSlice[:10])
}
